'use strict';

// require('../../../support/test-helper');
var assert = require('assert');

var DataviewsMapConfigAdapter = require('../../../lib/models/mapconfig/adapter/dataviews-widgets-adapter');

describe('dataviews-widgets-adapter', function () {
    var widgetsMapConfigs = [
        {
            input: {
                version: '1.4.0',
                layers: [
                    {
                        type: 'mapnik',
                        options: {
                            sql: 'select * from populated_places_simple_reduced',
                            cartocss: '#layer { marker-fill: red; marker-width: 32; marker-allow-overlap: true; }',
                            cartocss_version: '2.3.0',
                            widgets: {
                                country_places_count: {
                                    type: 'aggregation',
                                    options: {
                                        column: 'adm0_a3',
                                        aggregation: 'count'
                                    }
                                }
                            }
                        }
                    }
                ]
            },
            expected: {
                version: '1.4.0',
                layers: [
                    {
                        type: 'mapnik',
                        options: {
                            source: {
                                id: 'cdb-layer-source-0'
                            },
                            cartocss: '#layer { marker-fill: red; marker-width: 32; marker-allow-overlap: true; }',
                            cartocss_version: '2.3.0',
                            // keep them for now
                            widgets: {
                                country_places_count: {
                                    type: 'aggregation',
                                    options: {
                                        column: 'adm0_a3',
                                        aggregation: 'count'
                                    }
                                }
                            }
                        }
                    }
                ],
                analyses: [
                    {
                        id: 'cdb-layer-source-0',
                        type: 'source',
                        params: {
                            query: 'select * from populated_places_simple_reduced'
                        }
                    }
                ],
                dataviews: {
                    country_places_count: {
                        source: {
                            id: 'cdb-layer-source-0'
                        },
                        type: 'aggregation',
                        options: {
                            column: 'adm0_a3',
                            aggregation: 'count'
                        }
                    }
                }
            }
        },
        {
            input: {
                version: '1.4.0',
                layers: [
                    {
                        type: 'mapnik',
                        options: {
                            sql: 'select * from populated_places_simple_reduced',
                            cartocss: '#layer { marker-fill: red; marker-width: 32; marker-allow-overlap: true; }',
                            cartocss_version: '2.3.0',
                            widgets: {
                                pop_max: {
                                    type: 'histogram',
                                    options: {
                                        column: 'pop_max'
                                    }
                                }
                            }
                        }
                    }
                ]
            },
            expected: {
                version: '1.4.0',
                layers: [
                    {
                        type: 'mapnik',
                        options: {
                            source: {
                                id: 'cdb-layer-source-0'
                            },
                            cartocss: '#layer { marker-fill: red; marker-width: 32; marker-allow-overlap: true; }',
                            cartocss_version: '2.3.0',
                            // keep them for now
                            widgets: {
                                pop_max: {
                                    type: 'histogram',
                                    options: {
                                        column: 'pop_max'
                                    }
                                }
                            }
                        }
                    }
                ],
                analyses: [
                    {
                        id: 'cdb-layer-source-0',
                        type: 'source',
                        params: {
                            query: 'select * from populated_places_simple_reduced'
                        }
                    }
                ],
                dataviews: {
                    pop_max: {
                        source: {
                            id: 'cdb-layer-source-0'
                        },
                        type: 'histogram',
                        options: {
                            column: 'pop_max'
                        }
                    }
                }
            }
        },
        {
            input: {
                version: '1.4.0',
                layers: [
                    {
                        type: 'mapnik',
                        options: {
                            sql: 'select * from populated_places_simple_reduced',
                            cartocss: '#layer { marker-fill: red; marker-width: 32; marker-allow-overlap: true; }',
                            cartocss_version: '2.3.0',
                            widgets: {
                                country_places_count: {
                                    type: 'aggregation',
                                    options: {
                                        column: 'adm0_a3',
                                        aggregation: 'count'
                                    }
                                },
                                country_places_histogram: {
                                    type: 'histogram',
                                    options: {
                                        column: 'pop_max'
                                    }
                                }
                            }
                        }
                    }
                ]
            },
            expected: {
                version: '1.4.0',
                layers: [
                    {
                        type: 'mapnik',
                        options: {
                            source: {
                                id: 'cdb-layer-source-0'
                            },
                            cartocss: '#layer { marker-fill: red; marker-width: 32; marker-allow-overlap: true; }',
                            cartocss_version: '2.3.0',
                            // keep them for now
                            widgets: {
                                country_places_count: {
                                    type: 'aggregation',
                                    options: {
                                        column: 'adm0_a3',
                                        aggregation: 'count'
                                    }
                                },
                                country_places_histogram: {
                                    type: 'histogram',
                                    options: {
                                        column: 'pop_max'
                                    }
                                }
                            }
                        }
                    }
                ],
                analyses: [
                    {
                        id: 'cdb-layer-source-0',
                        type: 'source',
                        params: {
                            query: 'select * from populated_places_simple_reduced'
                        }
                    }
                ],
                dataviews: {
                    country_places_count: {
                        source: {
                            id: 'cdb-layer-source-0'
                        },
                        type: 'aggregation',
                        options: {
                            column: 'adm0_a3',
                            aggregation: 'count'
                        }
                    },
                    country_places_histogram: {
                        source: {
                            id: 'cdb-layer-source-0'
                        },
                        type: 'histogram',
                        options: {
                            column: 'pop_max'
                        }
                    }
                }
            }
        }
    ];

    var user = 'wadus';
    function params () {
        return {};
    }
    function context () {
        return {};
    }

    var dataviewsMapConfigAdapter = new DataviewsMapConfigAdapter();

    widgetsMapConfigs.forEach(function (mapConfig, index) {
        it('should adapt widgets ' + index, function (done) {
            dataviewsMapConfigAdapter.getMapConfig(user, mapConfig.input, params(), context(), function (err, result) {
                assert.ifError(err);
                assert.deepStrictEqual(result, mapConfig.expected);
                done();
            });
        });
    });
});
